auto();
launchApp("哈啰");
importClass(com.lai.proxy.FloatControl)
com.lai.proxy.FloatControl.INSTANCE.showControl('cola')

importClass(com.lai.proxy.AutoKV);
let paraStr=com.lai.proxy.AutoKV.get("params");
let para= JSON.parse(paraStr);
let 模式=para.type;
let 方案列表=para.plans;
log(para)
log("模式："+模式)
log("方案："+para.plans.length)
let scrollFlag = 0;
let 被人接了 = false;
//模式:同城，跨城，顺路

//监听是否被接单
threads.start(function () {
    //在新线程执行的代码
    events.observeToast();
    events.onToast(function (toast) {
        if (toast.getPackageName() === 'com.jingyao.easybike' && toast.getText() === '行程已被其他车主接单') {
            被人接了 = true;
        }
        log("Toast内容: " + toast.getText() + " 包名: " + toast.getPackageName());
    });
});

var errCount = 0;
while (true) {
    //检查当前是不是在指定的页面
    try {
        let nearFind = text("市内路线").id("tvNearPax");
        let acrossFind = text("城际路线").id("tvAcrossPax");
        let selectBg = id("tvSelectedBg").findOne(3000);
        if (nearFind.exists() && acrossFind.exists()) {
            被人接了 = false;
            if (selectBg.bounds().left > 200) {
                if (模式 === "同城") {
                    toastLog('当前模式为同城,请切换到市内路线');
                    sleep(3000);
                } else {
                    log("跨城路线");
                    let findRv = id("rvMatchOrders").className("androidx.recyclerview.widget.RecyclerView");
                    if (findRv.exists()) {
                        let rv = findRv.findOne(2000);
                        rv.children().forEach(relativeLayout => {
                            let item = relativeLayout.child(0);
                            if (item) {
                                let type = item.findOne(id("tvDriverPooling").className("android.widget.TextView")).text();
                                let time = item.findOne(id("tvDate").className("android.widget.TextView")).text();
                                let startAddress = item.findOne(id("tvStartAddressCross").className("android.widget.TextView")).text();
                                let startDistance = item.findOne(id("tvStartDistanceCross").className("android.widget.TextView")).text();
                                let money = item.findOne(id("tvAmount").className("android.widget.TextView")).text();
                                let peopleNum = item.findOne(id("tvDriverPeopleCount").className("android.widget.TextView")).text();
                                if (检查跨城方案列表(time, startDistance, startAddress, "", "", peopleNum, type, money)) {
                                    relativeLayout.click();
                                    sleep(1000)
                                    log("⭐类型：" + type + ",人数：" + peopleNum + ",时间：" + time + ",接人在：" + startAddress + ",接人距离：" + startDistance + ",费用：" + money);
                                    if (被人接了) {
                                        log("搞毛线，被人抢了");
                                        back()
                                        refresh()
                                    } else {
                                        device.vibrate(3000);
                                        sleep(77777)
                                    }
                                } else {
                                    log("📖类型：" + type + ",人数：" + peopleNum + ",时间：" + time + ",接人在：" + startAddress + ",接人距离：" + startDistance + ",费用：" + money);
                                }
                            }
                            
                        });
                        refresh();
                        // if (scrollFlag == 0) {
                        //     scrollFlag = 1;
                        //     rv.scrollForward();
                        // } else {
                        //     scrollFlag = 0;
                        //     refresh();
                        // }
                    }

                }

            } else {
                if (模式 === "跨城") {
                    toastLog('当前为跨城抢单模式,请切换到城际路线');
                    refresh();
                } else {
                    log("市内路线");
                    let findRv = id("rvMatchOrders").className("androidx.recyclerview.widget.RecyclerView");
                    if (findRv.exists()) {
                        let rv = findRv.findOne(2000);
                        rv.children().forEach(relativeLayout => {
                            let item = relativeLayout.child(0);
                            let 时间 = item.findOne(id("tvDate").className("android.widget.TextView")).text();
                            let 接距离 = item.findOne(id("tvStartAddress").className("android.widget.TextView")).text();
                            let 接地址 = item.findOne(id("tvStartDistance").className("android.widget.TextView")).text();
                            let 送距离 = item.findOne(id("tvEndAddress").className("android.widget.TextView")).text();
                            let 送地址 = item.findOne(id("tvRegionDescribe").className("android.widget.TextView")).text();
                            let 人数 = item.findOne(id("tvDriverPeopleCount").className("android.widget.TextView")).text();
                            let 类型 = item.findOne(id("tvDriverPooling").className("android.widget.TextView")).text();
                            let 价格 = item.findOne(id("tvAmount").className("android.widget.TextView")).text();
                            if (isContains(类型, '公斤')) {
                                人数 = 类型;
                                类型 = '送货'
                            }
                            if (检查同城方案列表(时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格)) {
                                relativeLayout.click();
                                sleep(1000)
                                log("⭐类型：" + 类型 + ",人数：" + 人数 + ",时间：" + 时间 + ",接人在：" + 接地址 + ",接人距离：" + 接距离 + ",费用：" + 价格);
                                if (被人接了) {
                                    log("搞毛线，被人抢了");
                                    back()
                                    refresh()
                                } else {
                                    device.vibrate(3000);
                                    sleep(77777)
                                }
                            } else {
                                log("📖类型：" + 类型 + ",人数：" + 人数 + ",时间：" + 时间 + ",接人在：" + 接地址 + ",接人距离：" + 接距离 + ",费用：" + 价格);
                            }
                        });
                        if (scrollFlag == 0) {
                            scrollFlag = 1;
                            rv.scrollForward();
                        } else {
                            scrollFlag = 0;
                            refresh();

                        }
                    }
                }

            }
            errCount = 0;

        } else if (id("ivAvatar").exists() && id("tvName").exists() && id("tvButton").exists()) {
            log("信息界面");
            errCount = 0;
            sleep(1000);
        } else if (text("查看计价规则").exists() && text("行程信息").exists() && text("行程费用").exists()) {
            log("详细界面");
            errCount = 0;
            sleep(1000);
        }
        else {
            log("未知界面");
            errCount++;
            sleep(3600);
        }
    } catch (error) {
        log("出错了");
        log(error);
        sleep(1000);
    }

}


function 检查跨城方案列表(时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格) {
    for (let i = 0; i < 跨城方案.length; i++) {
        let 方案 = 跨城方案[i];
        log("核查方案:" + i);
        if (检查跨城方案(方案, 时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格)) {
            return true;
        }
    }
    return false;
}

function 检查跨城方案(方案, 时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格) {
    if (方案.订单类型 !== 类型) {
        log("类型不符:" + 方案.订单类型 + "," + 类型)
        return false;
    }
    if (extractFloat(接距离) > 方案.最远距离) {
        log("距离不符:" + 方案.最远距离 + "," + 接距离)
        return false;
    }
    if (方案.订单类型 !== '送货' && extractFloat(人数) > 方案.最多人数) {
        log("人数不符:" + 方案.最多人数 + "," + 人数)
        return false;
    }
    if (方案.订单类型 !== '送货' && extractFloat(人数) < 方案.最少人数) {
        log("人数不符2:" + 方案.最少人数 + "," + 人数)
        return false;
    }
    if (extractFloat(价格) < 方案.最低价格) {
        log("价格不符2:" + 方案.最低价格 + "," + 价格)
        return false;
    }
    return true;
}

function 检查同城方案列表(时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格) {
    for (let i = 0; i < 方案列表.length; i++) {
        let 方案 = 方案列表[i];
        log("核查方案:" + i);
        if (检查同城方案(方案, 时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格)) {
            return true;
        }
    }
    return false;
}

function 检查同城方案(方案, 时间, 接距离, 接地址, 送距离, 送地址, 人数, 类型, 价格) {
    if (方案.orderType !== 类型) {
        log("类型不符:" + 方案.orderType + "," + 类型)
        return false;
    }
    if (extractFloat(接距离) > 方案.maxStartDistance) {
        log("距离不符:" + 方案.maxStartDistance + "," + 接距离)
        return false;
    }
    if (方案.orderType !== '送货' && extractFloat(人数) > 方案.maxPeople) {
        log("人数不符:" + 方案.maxPeople + "," + 人数)
        return false;
    }
    if (方案.orderType !== '送货' && extractFloat(人数) < 方案.minPeople) {
        log("人数不符2:" + 方案.minPeople + "," + 人数)
        return false;
    }
    if (extractFloat(价格) < 方案.minPrice) {
        log("价格不符:" + 方案.minPrice + "," + 价格)
        return false;
    }
    if (extractFloat(价格) > 方案.maxPrice) {
        log("价格不符2:" + 方案.maxPrice + "," + 价格)
        return false;
    }
    return true;
}


function checkAcSecond(type) {
    //当前暂无 id:tv_pool_recommend_none  className:android.widget.TextView (这种直接不接)
    if (id("tv_pool_recommend_none").className("android.widget.TextView").exists()) {
        log("没有顺路的其它订单");
        return false;
    }

    return true;
}

function extractFloat(str) {
    const regex = /[+-]?\d+(\.\d+)?/g;
    const matches = str.match(regex);
    if (matches === null) {
        return 0.0;
    }
    return parseFloat(matches[0]);
}

function clickRect(rect) {
    click(random(rect.left, rect.right), random(rect.top, rect.bottom))
}
/**
 * 刷新列表
 */
function refresh() {
    sleep(random(1500, 3000));
    id("btnRefresh").findOne().click();
}
function isContains(str, substr) {
    return str.indexOf(substr) >= 0;
}
//distanceInfo